Chapter 1 Regulaer Language
字符集
空字符串
确定性有限自动机 DFA 是五元组
- "确定性" 体现在
唯一开始状态和 状态转移的唯一性。 - DFA 的状态转移是由输入字符驱动的。
非确定性有限自动机 NFA 是五元组
- "非确定性" 体现在状态转移可以有多个选择,状态转移可以由
驱动。开始状态唯一与否在 NFA 中是等价的。
NFA 和 DFA 的等价性
- DFA 自动地是一个 NFA
- 构造与 NFA
等价的 DFA :无 边时, ,用集合运算来囊括所有的选择不确定性。存在 边时,提前合并所有的 连通块,定义 并以并集的形式拓展到 上,对应地替换 。
正则语言被定义为可以被 DFA 接受的语言。语言
接下通过正则表达式正面地描述正则语言的组成结构。
- 存在
上的正则表达式 满足 。
上述完整的拆分过程被称为的正则表达式,也称 为正则表达式。
广义非确定性有限自动机 GNFA 是五元组
GNFA 和 NFA 的等价性
- GNFA 是 NFA:每一条边都是一个正则表达式,而被正则表达式描述的语言必然能够用 NFA 识别(正则表达式所刻画的语言必然是正则语言),把 GNFA 的边替换为对应的 NFA 即可。
- NFA 是 GNFA:状态转移
的每一条边都是单字符,它们构成一个正则表达式 。构造唯一初态和终态可以通过添加 边解决。
GNFA 可以通过 "状态消去" 操作得到一个等价的但是状态数更少边标签信息更加密集的 GNFA
- 对于非初终状态
, 仍然是一个正则表达式
- 这个命题进一步说明 NFA、DFA、正则表达式、正则语言这些概念的本质相同
- "正则语言关于并、连接、Kleene 闭包封闭" 给出了这个命题的必要性
- 并封闭:NFA
,构造 NFA , 向 连 边。也可以用 DFA 积构造证明(同时跑两个 DFA) - 连接封闭:NFA
, 中的所有状态向 连 边 - Kleene 闭包封闭:NFA
, 中的所有状态向 连 边,由于需要接受 , 可以取任意 中元素
- 并封闭:NFA
- 充分性:对于描述正则语言
的一个 GNFA,通过不断进行 "状态消去" 操作最终会得到一个二状态的 GNFA,唯一的边标签给出了 的正则表达式。
泵引理
- 叙述:若
正则,存在 ,任意 都可以写成 的形式满足 成立 - 直觉:任意充分长的正则语言字符串都一定具有循环结构
- 证明:一个
状态 DFA 接受 ,对于 ,该 DFA 运行的前 步经过状态 ,容斥原理给出 的存在性,取 为 的 切片, 为 切片, 为 切片。
Myhill Nerode 定理
- 对于语言
,在 上定义 Nerode 关系 ,此时称 在 中不可区分。定义左商 可以重新叙述 Nerode 关系为 。用 DFA 语言不严谨地叙述 Nerode 关系:如果存在 DFA 接受 ,在 上运行 结束后位于状态 ,那么 的可达子图同构(图结构和图状态是否被接受两个意义下的)。 - Nerode 关系是等价关系。
- Nerode 关系满足右不变性
。 - 定理叙述:
是正则语言等价于 。并且如果 是识别 的 DFA 的最小状态数。 - 证明:
- 充分性:考虑识别
的 DFA ,首先拓展 ,定义 ,成立 (反方向不成立是因为可能存在同构的可达子图),于是我们有映射 ,从而 。 - 必要性:构造 DFA
满足 , 的良定义性来自于 Nerode 关系的右不变性, 的良定义性 是显然的。 恰好识别 : 被 接受等价于 ,所以 。
- 充分性:考虑识别
- 泵引理中的循环结构出现的原因就是正则语言只能记住有限状态的前缀历史信息,当字符串长度超过前缀历史信息状态数数时就会出现循环。